import axios from 'axios'
import router from '@/router'
import { message } from 'ant-design-vue'

const myAxios = axios.create({
  //写后端请求地址
  baseURL: 'http://localhost:8080',
  timeout: 3000,
  withCredentials: true,
  headers: {
    'Content-Type': 'application/json'
  }
})

myAxios.interceptors.request.use(
  (config) => {
    // 在发送请求之前做些什么
    // 例如：添加 token 到请求头
    const token = localStorage.getItem('token')
    if (token) {
      config.headers.Authorization = `Bearer ${token}`
    }

    // 可以在这里添加加载状态的逻辑
    // showLoading();

    return config
  },
  (error) => {
    // 对请求错误做些什么
    // hideLoading();
    return Promise.reject(error)
  }
)

myAxios.interceptors.response.use(
  (response) => {
    // 对响应数据做些什么
    // hideLoading();

    // 如果返回的状态码是 200，直接返回数据
    if (response.status === 200) {
      //自定义异常
      const result = response.data
      if (result.code === 200) {
        return response.data
      } else if (result.code === 40010) {
        // 未登录，跳转到登录页面
        router.push('/user/login')
      } else if (result.code === 40011) {
        message.error('权限拒绝')
      } else if (result.code === 50010) {
        message.warn(result.msg)
      } else {
        message.error('服务器内部错误')
      }


    } else {
      return Promise.reject(response)
    }
  },
  (error) => {
    // 对响应错误做些什么
    // hideLoading();

    // 处理 HTTP 错误状态码
    if (error.response) {
      switch (error.response.status) {
        case 401:
          // 未授权，跳转到登录页面
          router.push('/user/login')
          break
        case 403:
          // 权限不足，提示用户
          message.error('权限不足，无法访问')
          break
        case 404:
          // 资源未找到
          message.error('请求的资源未找到')
          break
        case 500:
          // 服务器内部错误
          message.error('服务器内部错误')
          break
        default:
          console.error('请求失败', error.response.status)
          message.error('请求失败')
      }
    } else if (error.request) {
      // 请求未收到响应
      console.error('请求未收到响应', error.request)
      message.error('无法访问')
    } else {
      // 其他错误
      console.error('请求出错', error.message)
      message.error('请求出错')
    }

    return Promise.reject(error)
  }
)
export default myAxios
